package com.system.manager.modules.projectLibrary.service;

import com.system.manager.common.annotation.CurrSubject;
import com.system.manager.common.entity.Result;
import com.system.manager.modules.authorized.entity.Subject;
import com.system.manager.modules.projectLibrary.dto.ProjectDto;
import com.system.manager.modules.projectLibrary.entity.Project;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.manager.modules.projectLibrary.vo.ProjectByDepartmentVo;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author jisf
 * @since 2021-11-03
 */
public interface IProjectService extends IService<Project> {

    /**
     * TODO 插入项目信息
     *
     * @param project
     */
    void insertProject(Project project, Subject subject);

    /**
     * TODO 修改项目信息
     *
     * @param project
     * @param subject
     */
    void updateProject(Project project, Subject subject);

    /**
     * TODO 管理项目负责人
     *
     * @param project
     */
    void manageProjectLeader(Project project);

    /**
     * TODO 处理备案审核
     *
     * @param id
     * @param putOnRecords
     */
    String auditProject(Integer id, Integer putOnRecords);

    /**
     * TODO 按项目类型查询本公司所有项目
     *
     * @param projectType
     * @return
     */
    Result selectProjectByType(Integer currPage, Integer size, String projectType, String name, String startTime, String endTime, Integer department, String putOnRecords, String checkAccept, Subject subject);

    /**
     * TODO 备案申请
     *
     * @param id
     */
    String applyPutOnRecords(Integer id);

    /**
     * TODO 删除项目
     *
     * @param id
     */
    String deleteProject(String id);

    /**
     * TODO 查询有人管理的项目
     *
     * @param subject
     * @return
     */
    List<Project> selectProjectHaveProjectLeader(Subject subject);

    /**
     * TODO 根据项目id查询项目名
     *
     * @param id
     * @return
     */
    String selectNameById(Integer id);

    /**
     * TODO 按部门查询公司所有项目
     *
     * @param subject
     * @return
     */
    List<ProjectByDepartmentVo> selectProjectByDepartment(Subject subject);

    /**
     * TODO 根据id查找到对应的项目内容并生成pdf文件
     * @param id
     * @return
     */
    String createPdf(String id);

    /**
     * TODO 设置项目负责人
     * @param id
     * @param project
     */
    String setProjectLeader(Integer id, String project, Subject subject);

    /**
     * TODO 分配项目
     * @param id
     * @param project
     * @return
     */
    String setProject(Integer id,Integer project);

    /**
     * TODO 查询自己负责的项目
     * @param subject
     * @return
     */
    ProjectDto selectOneProject(Subject subject);

    /**
     * TODO 查询所有申请项目
     * @param page
     * @param size
     * @param firm
     * @param putOnRecords
     * @param projectType
     * @return
     */
    Result selectAllProject(Integer page, Integer size, Integer firm, String putOnRecords, String projectType,String checkAccept);
}
